Geography of Covid Vaccine Hesitancy in the U.S.

Vaccine Line in Boston Massachusets, March 2021

Introduction

Back in March, I created my PUG Shiny project with a focus on COVID vaccine distribution. At the time, the issue facing the united states was primarily one of distribution: people who wanted the vaccine couldn’t get it. Eligibility was restricted state by state to allocate a precious resource. Even people who were eligible needed to get lucky and navigate online sign up forms, vouching for fewer spots than people. Here’s my Shiny App, improved and updated with the latest data:

Motivation

Over the past six weeks, the supply chain has greatly improved, and access is no longer such a pressing issue. The issues facing the country have evolved: the issue now is acheiving heard immunity, and getting everyone vaccinated. In March, I didn’t know anyone who had gotten a vaccine. But now in April, I don’t know anyone who hasn’t gotten one. I wanted to map out where in the country people are the most hesitant to get vaccinated. Knowing the most resistant geographies could be useful information for government organizations to focus their vaccine advocacy efforts.

Anti-Vax Protesters in Texas

Mapping County-Level Vaccine Hesitancy

Inter-Agency Knowledge Sharing

I investigated a CDC published dataset titled “Vaccine Hesitancy for COVID-19: County and local estimates.” The dataset comes from a publication by the ASPE, the Office of the Assistant Secretary for Planning and Evaluation, of the U.S. Department of Health and Human Services. Specifically, the data was collected via the U.S. Census Bureau’s Household Pulse Survey, 2021 Week 28, April 14-26.

H2: Variables of Interest

The dataset contained several demographic variables measured for each U.S. county. The variables of interest for this project are “Estimated Hesitant” and “Estimated Strongly Hesitant”, which measure the percent of adults in each county who indicated they are either hesitant, or strongly hesitant, respectively, to get vaccinated. Due to the phrasing of the variable description, I assume that survey respondents who indicated either “Hesitant” or “Strongly Hesitant” are all adults who have not yet received a covid vaccine. You can check out the ASPE’s methodology for these estimates here.

H2: Data Wrangling

H3: Fauci with a headache, or …

fauchi

H3: Data Wrangling

my_data0 <- my_data %>%
  #select columns relevant to my investigation
  select(c("County Name","State","Estimated hesitant", "Estimated strongly hesitant","Social Vulnerability Index (SVI)","SVI Category","Ability to handle a COVID-19 outbreak (CVAC)","CVAC Category","Percent adults fully vaccinated against COVID-19 as of 3/30/2021"))%>%
  
  #change names to lowercase for easy merging with map dataset
  mutate(State = tolower(State), `County Name` = tolower(`County Name`))%>%
  
  #rename columns to r-friendly names
  rename(region = State, subregion = `County Name`) %>%
  rename(est_hesitant = "Estimated hesitant")%>%
  rename(est_strong_hesitant = "Estimated strongly hesitant")%>%
  rename(svi_cat = "SVI Category"  )%>%
  rename(svi = "Social Vulnerability Index (SVI)"  )%>%
  rename(pct_full_vaxed = "Percent adults fully vaccinated against COVID-19 as of 3/30/2021")

 #edit subregion (county name) values to match their equivs in map dataset
 my_data0$subregion <- str_remove(my_data0$subregion, " county.*")
 my_data0$subregion <- str_remove(my_data0$subregion, ",.*")

H2: Making the maps

H3: Code

Creating mapable data set

{r} # usa_counties <- map_data(map = "county", region = ".") # # my_data0_map <- my_data0 %>% # inner_join(usa_counties, by =c("subregion", "region")) #

Mapping of hesitancy

{r,eval= FALSE} # ggplot(my_data0_map, aes(x = long, y = lat, group = group, fill = est_hesitant)) + # geom_polygon(color = "white", size = 0.05) + # theme_void() + # coord_fixed(ratio = 1.3) + # labs(fill = "Proportion of residents hesitant to be vaccinated") + # theme(legend.position="bottom")+ # scale_fill_distiller(palette = "Spectral") #

Mapping of strong hesitancy

{r, eval=FALSE} # ggplot(my_data0_map, aes(x = long, y = lat, group = group, fill = est_strong_hesitant)) + # geom_polygon(color = "white", size = 0.05) + # theme_void() + # coord_fixed(ratio = 1.3) + # labs(fill = "Proportion of residents STRONGLY hesitant to be vaccinated") + # theme(legend.position="bottom")+ # scale_fill_distiller(palette = "Spectral") #

H3: Hesitancy Map

{r,echo= FALSE} # ggplot(my_data0_map, aes(x = long, y = lat, group = group, fill = est_hesitant)) + # geom_polygon(color = "white", size = 0.05) + # theme_void() + # coord_fixed(ratio = 1.3) + # labs(fill = "Proportion of residents hesitant to be vaccinated") + # theme(legend.position="bottom")+ # scale_fill_distiller(palette = "Spectral") #

H3: Strong Hesitancy Map

{r, echo= FALSE} # ggplot(my_data0_map, aes(x = long, y = lat, group = group, fill = est_strong_hesitant)) + # geom_polygon(color = "white", size = 0.05) + # theme_void() + # coord_fixed(ratio = 1.3) + # labs(fill = "Proportion of residents STRONGLY hesitant to be vaccinated") + # theme(legend.position="bottom")+ # scale_fill_distiller(palette = "Spectral") #

H3: zooming in on distinct areas

{r midwest} # ggplot() + # geom_polygon(data = my_data0_map, aes(x = long, y = lat, group = group, fill = est_strong_hesitant), color = "white", size = 0.05) + # geom_polygon(data = usa_states, aes(x = long, y = lat, group = group),fill="NA", colour = "black") + # theme_void() + # coord_fixed(xlim = c(-110, -90), ylim = c(42, 50), ratio = 1.3) + # labs(fill = "Proportion of residents STRONGLY hesitant to be vaccinated") + # theme(legend.position="bottom")+ # scale_fill_distiller(palette = "Spectral") # # remove legend! # guides(fill = FALSE) #

{r tenn} # ggplot() + # geom_polygon(data = my_data0_map, aes(x = long, y = lat, group = group, fill = est_hesitant), color = "white", size = 0.05) + # geom_polygon(data = usa_states, aes(x = long, y = lat, group = group),fill="NA", colour = "black") + # theme_void() + # coord_fixed(xlim = c(-95, -75), ylim = c(30, 40), ratio = 1.3) + # labs(fill = "Proportion of residents STRONGLY hesitant to be vaccinated") + # theme(legend.position="bottom")+ # scale_fill_distiller(palette = "Spectral") # # remove legend! # guides(fill = FALSE) #

H1: Analysis of Maps

I observe a striking visual pattern in the mapping of county hesitancy levels. In many places on the map, we see areas that dont

IDK yet but theres something about how state lines really impact fill. I ran a cluser analysis to see if I was making this trend up or not

Try out clustering # {r, warning=FALSE, message=FALSE} # my_data0_map_cluster <- my_data0_map %>% # select(est_hesitant, long, lat) # # # set.seed(15) # library(mclust) # county_clusts <- my_data0_map_cluster %>% # kmeans(centers = 48)%>% # fitted("classes")%>% # as.character() # # my_data0_map_cluster <- my_data0_map_cluster %>% mutate(cluster = county_clusts) # # my_data0_map_cluster %>% ggplot(aes(x = long, y = lat)) + # geom_point(aes(color = cluster), alpha = 0.5)+ # coord_fixed(ratio = 1.3) #

{r, echo=FALSE} # #usa_states <- map_data(map = "state", region = ".") # # ggplot()+ # geom_point(data = my_data0_map_cluster, aes(x = long, y = lat, color = cluster), alpha = 0.5)+ # geom_polygon(data = usa_states, aes(x = long, y = lat, group = group),fill="NA", colour = "black") + # theme_void()+ # theme(legend.position="none") #

How to make tabs

Bulleted list

You can make a bulleted list like this:

  • item 1
  • item 2
  • item 3

Numbered list

You can make a numbered list like this

  1. First thing I want to say
  2. Second thing I want to say
  3. Third thing I want to say